/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package gamedsl2;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>State</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link gamedsl2.State#getPlayer <em>Player</em>}</li>
 *   <li>{@link gamedsl2.State#getEnvironment <em>Environment</em>}</li>
 *   <li>{@link gamedsl2.State#getGameStateTriggers <em>Game State Triggers</em>}</li>
 *   <li>{@link gamedsl2.State#getId <em>Id</em>}</li>
 *   <li>{@link gamedsl2.State#getName <em>Name</em>}</li>
 *   <li>{@link gamedsl2.State#getBackgroundImage <em>Background Image</em>}</li>
 *   <li>{@link gamedsl2.State#getMoveForce <em>Move Force</em>}</li>
 *   <li>{@link gamedsl2.State#getJumpForce <em>Jump Force</em>}</li>
 *   <li>{@link gamedsl2.State#getMoveUp <em>Move Up</em>}</li>
 *   <li>{@link gamedsl2.State#getMoveDown <em>Move Down</em>}</li>
 *   <li>{@link gamedsl2.State#getMoveLeft <em>Move Left</em>}</li>
 *   <li>{@link gamedsl2.State#getMoveRight <em>Move Right</em>}</li>
 *   <li>{@link gamedsl2.State#getActionButtonA <em>Action Button A</em>}</li>
 *   <li>{@link gamedsl2.State#getActionButtonB <em>Action Button B</em>}</li>
 *   <li>{@link gamedsl2.State#getTilesFile <em>Tiles File</em>}</li>
 *   <li>{@link gamedsl2.State#getMapFile <em>Map File</em>}</li>
 *   <li>{@link gamedsl2.State#getGameStateSubscribers <em>Game State Subscribers</em>}</li>
 * </ul>
 * </p>
 *
 * @see gamedsl2.Gamedsl2Package#getState()
 * @model annotation="http://www.eclipse.org/emf/2002/Ecore constraints='G3_PlayerAssignedToGameStateNotContainingItsEnvironment S18_StateMoveDownMustBeSet S2_stateHasPlayer S1_stateHasEnvironment S15_StateMoveLeftMustBeSet S6_UniqueDirectionalKeyValues S10_ValidMapFile S11_ValidTilesFile S8_StateIdMustBeSet S4_jumpForceChecker S16_StateMoveRightMustBeSet S12_StateBackgroundImageMustBeSet S19_StateActionButtonAMustBeSet S17_StateMoveUpMustBeSet S13_StateTilesFileMustBeSet S9_ValidBackgroundImageFileType S7_StateNameMustBeSet S14_StateMapFileMustBeSet'"
 *        annotation="http://www.eclipse.org/emf/2002/Ecore/OCL G3_PlayerAssignedToGameStateNotContainingItsEnvironment='\n\t\t\tlet env : AbstractEnvironment = self.environment.oclAsType(AbstractEnvironment) in\n\t\t\tlet actors : Set(ActorPhysics) = env.entities->select(oclIsTypeOf(ActorGame)).oclAsType(ActorPhysics)->asSet() in\n\t\t\tactors->includesAll(self.player)' S18_StateMoveDownMustBeSet='moveDown.oclIsUndefined()=false' S2_stateHasPlayer='player->size()>0' S1_stateHasEnvironment='environment->size()<=1' S15_StateMoveLeftMustBeSet='moveLeft.oclIsUndefined()=false' S6_UniqueDirectionalKeyValues='\n\t\t\tlet numOfUniqueDirKeys :Integer = 6 in\n\t\t\tlet allDirectionalKeyValues : Set(String)= self.actionButtonA->union(self.actionButtonB->union(self.moveDown->union(self.moveLeft->union(self.moveRight->union(self.moveUp->asSet()))))) in\n\t\t\t allDirectionalKeyValues->size() = numOfUniqueDirKeys' S10_ValidMapFile='isMapImageFileType(self.mapFile) = true' S11_ValidTilesFile='isTilesFileType(self.tilesFile) = true' S8_StateIdMustBeSet='id.oclIsUndefined()=false' S4_jumpForceChecker='jumpForce>10000 and jumpForce<50000' S16_StateMoveRightMustBeSet='moveRight.oclIsUndefined()=false' S12_StateBackgroundImageMustBeSet='backgroundImage.oclIsUndefined()=false' S19_StateActionButtonAMustBeSet='actionButtonA.oclIsUndefined()=false' S17_StateMoveUpMustBeSet='moveUp.oclIsUndefined()=false' S13_StateTilesFileMustBeSet='tilesFile.oclIsUndefined()=false' S9_ValidBackgroundImageFileType='isValidImageFileType(self.backgroundImage) = true' S7_StateNameMustBeSet='name.oclIsUndefined()=false' S14_StateMapFileMustBeSet='mapFile.oclIsUndefined()=false'"
 * @generated
 */
public interface State extends IEventHandler {
	/**
	 * Returns the value of the '<em><b>Player</b></em>' reference list.
	 * The list contents are of type {@link gamedsl2.ActorPhysics}.
	 * It is bidirectional and its opposite is '{@link gamedsl2.ActorPhysics#getGameState <em>Game State</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Player</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Player</em>' reference list.
	 * @see gamedsl2.Gamedsl2Package#getState_Player()
	 * @see gamedsl2.ActorPhysics#getGameState
	 * @model opposite="gameState" required="true"
	 * @generated
	 */
	EList<ActorPhysics> getPlayer();

	/**
	 * Returns the value of the '<em><b>Environment</b></em>' containment reference.
	 * It is bidirectional and its opposite is '{@link gamedsl2.Environment#getState <em>State</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Environment</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Environment</em>' containment reference.
	 * @see #setEnvironment(Environment)
	 * @see gamedsl2.Gamedsl2Package#getState_Environment()
	 * @see gamedsl2.Environment#getState
	 * @model opposite="state" containment="true"
	 * @generated
	 */
	Environment getEnvironment();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getEnvironment <em>Environment</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Environment</em>' containment reference.
	 * @see #getEnvironment()
	 * @generated
	 */
	void setEnvironment(Environment value);

	/**
	 * Returns the value of the '<em><b>Game State Triggers</b></em>' reference list.
	 * The list contents are of type {@link gamedsl2.Event}.
	 * It is bidirectional and its opposite is '{@link gamedsl2.Event#getTriggerGameState <em>Trigger Game State</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Game State Triggers</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Game State Triggers</em>' reference list.
	 * @see gamedsl2.Gamedsl2Package#getState_GameStateTriggers()
	 * @see gamedsl2.Event#getTriggerGameState
	 * @model opposite="triggerGameState"
	 * @generated
	 */
	EList<Event> getGameStateTriggers();

	/**
	 * Returns the value of the '<em><b>Id</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Id</em>' attribute.
	 * @see #setId(int)
	 * @see gamedsl2.Gamedsl2Package#getState_Id()
	 * @model
	 * @generated
	 */
	int getId();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getId <em>Id</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Id</em>' attribute.
	 * @see #getId()
	 * @generated
	 */
	void setId(int value);

	/**
	 * Returns the value of the '<em><b>Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Name</em>' attribute.
	 * @see #setName(String)
	 * @see gamedsl2.Gamedsl2Package#getState_Name()
	 * @model
	 * @generated
	 */
	String getName();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getName <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Name</em>' attribute.
	 * @see #getName()
	 * @generated
	 */
	void setName(String value);

	/**
	 * Returns the value of the '<em><b>Background Image</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Background Image</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Background Image</em>' attribute.
	 * @see #setBackgroundImage(String)
	 * @see gamedsl2.Gamedsl2Package#getState_BackgroundImage()
	 * @model
	 * @generated
	 */
	String getBackgroundImage();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getBackgroundImage <em>Background Image</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Background Image</em>' attribute.
	 * @see #getBackgroundImage()
	 * @generated
	 */
	void setBackgroundImage(String value);

	/**
	 * Returns the value of the '<em><b>Move Force</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Move Force</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Move Force</em>' attribute.
	 * @see #setMoveForce(float)
	 * @see gamedsl2.Gamedsl2Package#getState_MoveForce()
	 * @model
	 * @generated
	 */
	float getMoveForce();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMoveForce <em>Move Force</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Move Force</em>' attribute.
	 * @see #getMoveForce()
	 * @generated
	 */
	void setMoveForce(float value);

	/**
	 * Returns the value of the '<em><b>Jump Force</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Jump Force</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Jump Force</em>' attribute.
	 * @see #setJumpForce(float)
	 * @see gamedsl2.Gamedsl2Package#getState_JumpForce()
	 * @model
	 * @generated
	 */
	float getJumpForce();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getJumpForce <em>Jump Force</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Jump Force</em>' attribute.
	 * @see #getJumpForce()
	 * @generated
	 */
	void setJumpForce(float value);

	/**
	 * Returns the value of the '<em><b>Move Up</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Move Up</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Move Up</em>' attribute.
	 * @see #setMoveUp(String)
	 * @see gamedsl2.Gamedsl2Package#getState_MoveUp()
	 * @model
	 * @generated
	 */
	String getMoveUp();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMoveUp <em>Move Up</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Move Up</em>' attribute.
	 * @see #getMoveUp()
	 * @generated
	 */
	void setMoveUp(String value);

	/**
	 * Returns the value of the '<em><b>Move Down</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Move Down</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Move Down</em>' attribute.
	 * @see #setMoveDown(String)
	 * @see gamedsl2.Gamedsl2Package#getState_MoveDown()
	 * @model
	 * @generated
	 */
	String getMoveDown();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMoveDown <em>Move Down</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Move Down</em>' attribute.
	 * @see #getMoveDown()
	 * @generated
	 */
	void setMoveDown(String value);

	/**
	 * Returns the value of the '<em><b>Move Left</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Move Left</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Move Left</em>' attribute.
	 * @see #setMoveLeft(String)
	 * @see gamedsl2.Gamedsl2Package#getState_MoveLeft()
	 * @model
	 * @generated
	 */
	String getMoveLeft();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMoveLeft <em>Move Left</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Move Left</em>' attribute.
	 * @see #getMoveLeft()
	 * @generated
	 */
	void setMoveLeft(String value);

	/**
	 * Returns the value of the '<em><b>Move Right</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Move Right</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Move Right</em>' attribute.
	 * @see #setMoveRight(String)
	 * @see gamedsl2.Gamedsl2Package#getState_MoveRight()
	 * @model
	 * @generated
	 */
	String getMoveRight();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMoveRight <em>Move Right</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Move Right</em>' attribute.
	 * @see #getMoveRight()
	 * @generated
	 */
	void setMoveRight(String value);

	/**
	 * Returns the value of the '<em><b>Action Button A</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Action Button A</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Action Button A</em>' attribute.
	 * @see #setActionButtonA(String)
	 * @see gamedsl2.Gamedsl2Package#getState_ActionButtonA()
	 * @model
	 * @generated
	 */
	String getActionButtonA();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getActionButtonA <em>Action Button A</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Action Button A</em>' attribute.
	 * @see #getActionButtonA()
	 * @generated
	 */
	void setActionButtonA(String value);

	/**
	 * Returns the value of the '<em><b>Action Button B</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Action Button B</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Action Button B</em>' attribute.
	 * @see #setActionButtonB(String)
	 * @see gamedsl2.Gamedsl2Package#getState_ActionButtonB()
	 * @model
	 * @generated
	 */
	String getActionButtonB();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getActionButtonB <em>Action Button B</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Action Button B</em>' attribute.
	 * @see #getActionButtonB()
	 * @generated
	 */
	void setActionButtonB(String value);

	/**
	 * Returns the value of the '<em><b>Tiles File</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Tiles File</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Tiles File</em>' attribute.
	 * @see #setTilesFile(String)
	 * @see gamedsl2.Gamedsl2Package#getState_TilesFile()
	 * @model
	 * @generated
	 */
	String getTilesFile();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getTilesFile <em>Tiles File</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Tiles File</em>' attribute.
	 * @see #getTilesFile()
	 * @generated
	 */
	void setTilesFile(String value);

	/**
	 * Returns the value of the '<em><b>Map File</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Map File</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Map File</em>' attribute.
	 * @see #setMapFile(String)
	 * @see gamedsl2.Gamedsl2Package#getState_MapFile()
	 * @model
	 * @generated
	 */
	String getMapFile();

	/**
	 * Sets the value of the '{@link gamedsl2.State#getMapFile <em>Map File</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Map File</em>' attribute.
	 * @see #getMapFile()
	 * @generated
	 */
	void setMapFile(String value);

	/**
	 * Returns the value of the '<em><b>Game State Subscribers</b></em>' reference list.
	 * The list contents are of type {@link gamedsl2.Event}.
	 * It is bidirectional and its opposite is '{@link gamedsl2.Event#getSubscriberGameStates <em>Subscriber Game States</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Game State Subscribers</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Game State Subscribers</em>' reference list.
	 * @see gamedsl2.Gamedsl2Package#getState_GameStateSubscribers()
	 * @see gamedsl2.Event#getSubscriberGameStates
	 * @model opposite="subscriberGameStates"
	 * @generated
	 */
	EList<Event> getGameStateSubscribers();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model annotation="http://www.eclipse.org/emf/2002/Ecore/OCL body='\n\t\t\t let endIndex : Integer = src.size() in\n\t\t\t let startIndex : Integer = tgt.size()-1 in\n\t\t\t src.substring(endIndex-startIndex,endIndex)->intersection(tgt->asSet())->size() = 1'"
	 * @generated
	 */
	boolean isSubString(String src, String tgt);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model annotation="http://www.eclipse.org/emf/2002/Ecore/OCL body='\n\t\t\t\tlet ft:Set(String) = Set{\'.png\',\'.gif\',\'.jpg\'} in\n\t\t\t\tlet results: Integer = ft->any(f:String | self.isSubString(src,f) = true)->size() in\n\t\t\t\tif results = 1 then\n\t\t\t\t\ttrue\n\t\t\t\telse false\n\t\t\t\tendif'"
	 * @generated
	 */
	boolean isValidImageFileType(String src);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model annotation="http://www.eclipse.org/emf/2002/Ecore/OCL body='\n\t\t\t\tlet ft:Set(String) = Set{\'.txt\'} in\n\t\t\t\tlet results: Integer = ft->any(f:String | self.isSubString(src,f) = true)->size() in\n\t\t\t\tif results = 1 then\n\t\t\t\t\ttrue\n\t\t\t\telse false\n\t\t\t\tendif'"
	 * @generated
	 */
	boolean isMapImageFileType(String src);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model annotation="http://www.eclipse.org/emf/2002/Ecore/OCL body='\n\t\t\t\tlet ft:Set(String) = Set{\'.xml\'} in\n\t\t\t\tlet results: Integer = ft->any(f:String | self.isSubString(src,f) = true)->size() in\n\t\t\t\tif results = 1 then\n\t\t\t\t\ttrue\n\t\t\t\telse false\n\t\t\t\tendif'"
	 * @generated
	 */
	boolean isTilesFileType(String src);

} // State
